package com.wondertek.poms.core.service;

import com.wondertek.poms.common.service.IService;
import com.wondertek.poms.dao.po.PrdInfo;
import com.wondertek.poms.dao.po.SystemConfig;
import org.springframework.data.jpa.repository.Query;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * @author chenjijiang
 * @description
 */
public interface IPrdInfoService extends IService<PrdInfo, Long> {

	/**
	 * <p><b>Title:</b> getNotPackageProductInfo</p>
	 * <p><b>Description:</b> 获取没有二级产品的商品包集合、包含普通包、父子包</p>
	 *
	 * @return
	 * @author douzi
	 */
	Map<String, List<List<PrdInfo>>> getNotPackagePrdInfo();

	/**
	 * <p><b>Title:</b> findPrdInfoInPackageId</p>
	 * <p><b>Description:</b> 通过二级产品包id，获取商品包列表，且只属于poms</p>
	 *
	 * @param productInfoPackageId
	 * @param publishStatus
	 * @return
	 * @author douzi
	 */
	List<PrdInfo> findPrdInfoInPackageId(Long productInfoPackageId, int publishStatus);

	PrdInfo findByPrdInfoId(Long prdInfoId);

	Map<String, Object> syncPowerData(Map<String, Object> map);

	Map<String, Object> withdrawPrdInfo(PrdInfo prdInfo, SystemConfig basePathsConfig);

	int updateIsPublish(Integer status, List<Long> prdInfoIds);

	Map<String, Object> publishPrdInfo(PrdInfo prdInfo, SystemConfig basePathsConfig, SystemConfig urlConfig, Map<String, Object> resultMap, List<String> prdInfoNameList);

	int updatePrdInfoPublish(Integer status, LocalDateTime now, List<Long> list);

	/**
	 * <p><b>Title:</b> findAllByProductInfoPackageId</p>
	 * <p><b>Description:</b> 查询商品包列表</p>
	 *
	 * @param productInfoPackageId 二级产品id
	 * @return 商品包列表
	 * @author gaozhengxing gaozhenghang@wondertek.com.cn
	 * @date 2021/1/14 20:29
	 */
	List<PrdInfo> findAllByProductInfoPackageId(Long productInfoPackageId);

	List<PrdInfo> findAllTargetPrdInfo(Long prdInfoId);
	List<PrdInfo> findAllPublishedPrdInfo();
	PrdInfo getByPrdInfoIdAndSystemFlag(Long prdInfoId);

	/**
	 * <p><b>Title:</b> findPrdInfoInPackageId</p>
	 * <p><b>Description:</b> 获取二级产品是poms的商品包列表，且包是发布状态 </p>
	 * @param publishStatus 是否发布  1：未发布 2：已发布 3：已撤回
	 * @author 高正行
	 * @return 获取二级产品是poms的商品包列表
	 */
	List<PrdInfo> findPrdInfoByIsPublish(int publishStatus);

	/**
	 * <p><b>Title:</b> findPrdInfoInPackageId</p>
	 * <p><b>Description:</b> 获取二级产品是poms的黑白名单商品包列表(过滤掉父子包)，且包是发布状态 </p>
	 * @param publishStatus 是否发布  1：未发布 2：已发布 3：已撤回
	 * @author 高正行
	 * @return 获取二级产品是poms的黑白名单商品包列表
	 */
	List<PrdInfo> findForBlackWhite(int publishStatus);

}
